/**
 * Copyright(c) kyle.
 */
package org.example.jvm;

/**
 * 被动使用类字段
 *
 * @author kyle
 * @version 1.00.00
 * @since [2020-12-03 10:50]
 * @updateUser [Kyle]
 * @updateRemark [说明本次修改内容]
 * @date [2020-12-03 10:50]
 */
public class PassiveUseOfClassFields {
    public static void main(String[] args) {
        System.out.println(SubClass.value);//通过子类引用父类的静态字段，不会导致子类初始化
        SuperClass[] superClass1 = new SuperClass[10];//通过数组定义来引用类，不会触发此类的初始化
        System.out.println(ConstClass.HELLOWORLD);//final注解的常量在编译阶段会存入调用类的常量池中，本质上没有直接应用到定义常量的类，也不会触发定义常量的类的出书画
    }

    private static class SuperClass {
        public static int value = 123;

        static {
            System.out.println("父类初始化");
        }
    }

    private static class SubClass extends SuperClass {
        static {
            System.out.println("子类初始化");
        }
    }

    private static class ConstClass {
        public static final String HELLOWORLD = "hello world";

        static {
            System.out.println("ConstClass初始化");
        }
    }
}
